package com.itcast.googleplay.ui;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;

public class RatioImageView extends ImageView {
//	public static final float ratio = 2.43f;
	private static final String NAMESPACE = "http://schemas.android.com/apk/res/com.itcast.googleplay";
	private float ratio;

	public RatioImageView(Context context, AttributeSet attrs) {
		super(context, attrs);
		//让此控件按照一定的比例去展示图片
		//1.将比例大小获取出来,自定义属性值的获取
		ratio = attrs.getAttributeFloatValue(NAMESPACE, "ratio", 0);
	}
	//onMeasure  onLayout  onDraw
	
	//widthMeasureSpec	模式+宽度大小 = 综合结果		32位2进制数	2+30
	//前2位代表模式	模式最多能有几种?  00,01,10,11	系统维护了三种模式	
	//	MeasureSpec.AT_MOST				wrap_content
	//	MeasureSpec.EXACTLY确切			指定了像素大小,match_parent			
	//	MeasureSpec.UNSPECIFIED未定义		ListView设置数据适配器(有多高)
	//后30位代表像素大小	

	//定义一个TextView ,宽度大小为100dp
	
	//1.100dp转换成px,系统做此事,假设是dp:px = 1:1情况  100dp = 100px
	//2.100px代表精确像素大小,所以也需要去匹配精确模式
	//3.MeasureSpec.EXACTLY(前2位)(100px)(后30位)
	
	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		//1,因为此控件的明确宽高比例必须是2.43:1		获取了宽度后,可以计算出高度
		//2,获取控件宽度,因为是定值,所以获取其大小
		int widthSize = MeasureSpec.getSize(widthMeasureSpec);
		//3.计算高度,得到的也是精确值
		int heightSize = (int)(widthSize/ratio+0.5f);
		//4.按照计算的结果,重新定义heightMeasureSpec 32位数(模式:MeasureSpec.EXACTLY  大小:heightSize)
		heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize, MeasureSpec.EXACTLY);
		//5.系统使用自己定义的32位数
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
	}
}
